package com.zlm.common.base;

import org.apache.ibatis.session.RowBounds;

import java.io.Serializable;
import java.util.List;

/**
 * 基础DAO
 * Entity 数据库对应的实体对象
 * Pk 数据库表对应的主键
 *
 * @Author: duyufu
 * @Date: 2019/3/14 13:42
 */
public abstract interface BaseDao<Entity extends Serializable> {

    /**
     * 查询总数
     *
     * @return
     */
    public int selectCount();

    /**
     * 根据对象内参数查询总数
     *
     * @param entity
     * @return
     */
    public int selectCountByEntity(Entity entity);

    /**
     * 根据对象内参数查询一条数据
     *
     * @param entity
     * @return
     */
    public Entity selectEntity(Entity entity);

    /**
     * 查询全部数据集合
     *
     * @return
     */
    public List<Entity> selectAll();

    /**
     * 根据对象内参数分页查询集合
     *
     * @param entity
     * @param rowBounds
     * @return
     */
    public List<Entity> selectListByEntity(Entity entity, RowBounds rowBounds);

    /**
     * 根据对象内参数查询集合
     *
     * @param entity
     * @return
     */
    public List<Entity> selectListByEntity(Entity entity);

    /**
     * 插入一条数据
     *
     * @param entity
     * @return
     */
    public int insert(Entity entity);

    /**
     * 根据对象内参数更新数据
     *
     * @param entity
     * @return
     */
    public int update(Entity entity);

    /**
     * 根据对象内参数删除数据
     *
     * @param entity
     * @return
     */
    public int delete(Entity entity);

}
